//
//  YWKeepWatchDBManager.h
//  maintain
//
//  Created by Kyo on 16/9/1.
//  Copyright © 2016年 ewin. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "YWSingleton.h"

@class FMResultSet;
@class FMDatabase;
@class YWKeepWatchMission;
@class YWPatrollineRecord;
@class YWPatrolLine;
@class YWPatrolPointRecord;

@interface YWKeepWatchDBManager : NSObject
YWSingletonH(Manager)


/**
 *  创建巡更的数据库表
 *
 *  @return 结果
 */
- (void)createAllKeepWatchTables;
/**
 *  更新巡更的数据库表
 *
 *  @return 结果
 */
- (void)dropAndReCreateKeepWatchTables;
/**
 *  更新巡更路线表
 *
 *  @return 结果
 */
- (void)dropAndReCreatePatrolLineTable;
/**
 *  添加或者删除字段
 *
 *  @return 结果
 */
- (void)dropAndReCreatePatrollineRecordTable;
/**
 *  保存巡更任务
 *
 *  @param keepWatchMissions 巡更任务模型数组
 *
 *  @return 结果
 */
- (BOOL)updateKeepWatchMissionWithArray:(NSArray*)keepWatchMissions;
/**
 *  保存巡更路线(不是完整的路线，只更新id和名字)
 *
 *  @param patrolLine 巡更路线模型
 *
 *  @return 结果
 */
- (BOOL)updatePatrolLineIdAndName:(YWPatrolLine*)patrolLine;
/**
 *  保存巡更路线(全量更新)
 *
 *  @param patrolLine 巡更路线模型
 *
 *  @return 结果
 */
- (BOOL)updatePatrolLineWithLine:(YWPatrolLine*)patrolLine;
/**
 *  不完整的，需要请求的路线
 *
 *  @return 只有id和updateTime的路线对象数组
 */
- (NSArray*)needRequestPatrolLines;
/**
 *  保存巡更路线(完整的路线)
 *
 *  @param patrolLineArray 巡更路线数组
 *
 *  @return 结果
 */
- (BOOL)updatePatrolLine:(NSArray*)patrolLineArray;
/**
 *  更新巡更任务删除状态
 *
 *  @param keepWatchMissionId 巡更任务Id
 *
 *  @return 任务模型
 */
- (BOOL)updateKeepWatchDeleteStatusWithMissionId:(NSInteger)keepWatchMissionId;
/**
 *  所有巡更任务
 *
 *  @return 任务模型数组
 */
- (NSArray*)allKeepWatchMissions;
/**
 *  按页数获取巡更任务
 *
 *  @return 任务模型数组
 */
- (NSArray*)keepWatchMissionsWithPage:(NSInteger)page;
/**
 *  所有巡更任务id（逗号隔开）
 *
 *  @return 任务模型数组
 */
- (NSString*)allKeepWatchMissionIds;
/**
 *  获取巡更任务
 *
 *  @param keepWatchMissionId 巡更任务Id
 *
 *  @return 任务模型
 */
- (YWKeepWatchMission*)keepWatchMissionWithMissionId:(NSInteger)keepWatchMissionId;

- (YWKeepWatchMission*)keepWatchMissionWithFMResultSet:(FMResultSet*)set FMDatabase:(FMDatabase*)db;
/**
 *  获取巡更任务
 *
 *  @param locationId 位置Id
 *
 *  @return 任务模型
 */
- (NSArray*)keepWatchMissionWithLocationId:(NSInteger)locationId;
/**
 *  保存巡更路线记录
 *
 *  @param patrollineRecords 巡更路线记录模型数组
 *
 *  @return 结果
 */
- (BOOL)updatePatrollineRecordWithArray:(NSArray*)patrollineRecords;
/**
 *  更新巡更路线记录（网络数据）
 *
 *  @param patrollineRecords 巡更路线记录模型数组
 *
 *  @return 结果
 */
- (BOOL)updatePatrollineRecordWithNewWorkData:(NSArray*)patrollineRecords;
/**
 *  最新巡更路线记录
 *
 *  @param uniqueTag
 *
 *  @return 结果
 */
- (YWPatrollineRecord*)latestPatrollineRecordWithUniqueTag:(NSString*)uniqueTag;
/**
 *  获取当天完成巡更记录次数
 *
 *  @param patrolLineId 巡更路线id
 *  @param keepWatchMissionId 任务id
 *
 *  @return 记录模型数组
 */
- (NSInteger)todayFinishCountWithPatrolLineId:(NSInteger)patrolLineId keepWatchMissionId:(NSInteger)keepWatchMissionId;

/**
 *  获取巡更路线记录
 *
 *  @param keepWatchMission 巡更任务
 *  @param page 页数
 *
 *  @return 记录模型数组
 */
- (NSArray*)patrollineRecordWithKeepWatchMission:(YWKeepWatchMission*)keepWatchMission page:(NSInteger)page;

- (YWPatrollineRecord*)patrollineRecordWithFMResultSet:(FMResultSet*)set FMDatabase:(FMDatabase*)db;
/**
 *  获取巡更路线记录
 *
 *  @param page 页数
 *
 *  @return 记录模型数组
 */
- (NSArray*)patrolLineRecordWithPage:(NSInteger)page;
/**
 *  更新记录已读状态
 *
 *  @return 无
 */
- (BOOL)updateReadStatusWithKeepWatchMissionId:(NSInteger)keepWatchMissionId;

/**
 *  保存巡更点记录
 *
 *  @param patrollineRecords 巡更点记录模型数组
 *
 *  @return 结果
 */
- (BOOL)updatePatrolPointRecordWithArray:(NSArray*)patrolPointRecords;
/**
 *  巡更点记录
 *
 *  @param uniqueTag 巡更路线标识
 *
 *  @return 记录模型数组
 */
- (NSArray*)patrolPointRecordWithUniqueTag:(NSString*)uniqueTag;
/**
 *  巡更点记录的数量
 *
 *  @param uniqueTag 巡更路线记录标识
 *
 *  @return 记录模型数组
 */
- (NSInteger)countOfPatrolPointRecordWithUniqueTag:(NSString*)uniqueTag;
/**
 *  巡更点记录
 *
 *  @param locationId 位置ID
 *
 *  @return 结果
 */
- (NSArray*)patrolPointRecordWithLocationId:(NSInteger)locationId;
- (YWPatrolPointRecord*)patrolPointRecordWithFMResultSet:(FMResultSet*)set FMDatabase:(FMDatabase*)db;
/**
 *  更新巡更记录的上传状态
 *
 *  @param uploadStatus  上传状态
 *  @param recordId 记录id
 *
 *  @return 结果
 */
- (BOOL)updatePatrolPointRecordUploadStatus:(NSInteger)uploadStatus pointRecordId:(NSString*)recordId;
/**
 *  上传失败的巡更点记录
 *
 *  @return 记录点模型数组
 */
- (NSArray*)patrolPointRecordsWithUploadStatusFail;
/**
 *  获取上传失败的巡更点记录
 *
 *  @return 记录点模型数组
 */
- (NSArray *)uploadFailedPatrolPointRecords;

/**
 *  所有巡更点
 *
 *  @param patrolLineId 巡更路线id
 *
 *  @return 巡更location模型数组
 */
- (NSArray*)allPatrolLocationWithPatrolLineId:(NSInteger)patrolLineId;
/**
 *  路线下的位置是否存在
 *
 *  @return 记录点模型数组
 */
- (BOOL)isExistLocationWithPatrolLineId:(NSInteger)patrolLineId;
/**
 *  获取巡更点备注
 *
 *  @param locationId 位置
 *
 *  @return 巡更location模型数组
 */
- (NSArray*)patrolLocationNoteWithLocationId:(NSInteger)locationId lineIds:(NSArray*)patrolLineIdArray;
/**
 *  巡更线路对象
 *
 *  @param patrolLineId 巡更路线id
 *
 *  @return 结果
 */
- (YWPatrolLine*)patrolLineWithPatrolLineId:(NSInteger)patrolLineId;
/**
 *  sort
 *
 *  @param locationId 位置id
 *
 *  @return sort
 */
- (NSInteger)sortWithLocationId:(NSInteger)locationId patrolLineId:(NSInteger)patrolLineId;
@end
